package com.example.demo.leetcode100题;

import com.example.demo.StopWatchTemplate;

/**
 * @author：zzc
 * @date: 2022/9/4
 */
public class 字符串解码 {

    //给定一个经过编码的字符串，返回它解码后的字符串。
    //编码规则为: k[encoded_string]，表示其中方括号内部的 encoded_string 正
    //好重复 k 次。注意 k 保证为正整数。
    //你可以认为输入字符串总是有效的；输入字符串中没有额外的空格，且输入
    //的方括号总是符合格式要求的。
    //此外，你可以认为原始数据不包含数字，所有的数字只表示重复的次数 k ，
    //例如不会出现像 3a 或 2[4] 的输入。
    //示例 1：
    //输入：s = "3[a]2[bc]"
    //输出："aaabcbc"
    //示例 2：
    //输入：s = "3[a2[c]]"
    //输出："accaccacc"
    //示例 3：
    //输入：s = "2[abc]3[cd]ef"
    //输出："abcabccdcdcdef"
    //示例 4：
    //输入：s = "abc3[cd]xyz"
    //输出："abccdcdcdxyz"

    public static void main(String[] args) {
        //首先按字符读取字符串，只要不是右中括号“]”，将数据逐一压栈；当遇
        //到右中括号“]”，开始出栈，一直出栈到遇到的第一个左中括号“[”的前一个
        //为止；根据出栈的元素拼凑出一个临时字符串，并将临时字符串压栈；

        //继续读取原字符串，重复上述的过程，遇到右中括号“]”之前压栈，遇到
        //右中括号“]”开始出栈并拼凑重复的字符串，直到原字符串读取完毕以及栈为
        //空为止

        System.out.println(StopWatchTemplate.doSupplier(() -> decode("3[a]2[bc]")));
    }

    private static String decode(String s) {
        // 利用栈  todo

        return null;
    }
}
